package com.lswms.modules.lswms.service.impl.base;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lswms.common.service.impl.CrudServiceImpl;
import com.lswms.modules.lswms.dao.base.CargojcDao;
import com.lswms.modules.lswms.dao.stock.InventoryDao;
import com.lswms.modules.lswms.dto.base.CargojcDTO;
import com.lswms.modules.lswms.entity.base.CargojcEntity;
import com.lswms.modules.lswms.entity.stock.InventoryEntity;
import com.lswms.modules.lswms.service.base.CargojcService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * 货箱检测
 *
 * @author DX sunlightcs@gmail.com
 * @since 1.0.0 2022-02-19
 */
@Service
public class CargojcServiceImpl extends CrudServiceImpl<CargojcDao, CargojcEntity, CargojcDTO> implements CargojcService {

    @Autowired
    private CargojcDao cargojcDao;

    @Autowired
    private InventoryDao inventoryDao;

    @Override
    public QueryWrapper<CargojcEntity> getWrapper(Map<String, Object> params){
        String catgoNo = (String)params.get("cargono");

        QueryWrapper<CargojcEntity> wrapper = new QueryWrapper<>();
        wrapper.eq(StringUtils.isNotBlank(catgoNo), "cargono", catgoNo);

        return wrapper;
    }


    @Override
    public InventoryEntity cargo(List<InventoryEntity> list) {

        return null;
    }


    //清楚货物检测的状态
    @Override
    public void cargoDatail(List<InventoryEntity> list) {
        List<String> trays = new ArrayList<>();
        int i = 0;
        //回复正常的物料信息(清理掉lot15的检测状态/更换成原来的物料信息)
        for (InventoryEntity inventtory : list){

            /*不能这么传，如果全部转移到其他箱子，或者转移到了检测箱表内有数据的箱子就会造成没有删，或者误删等情况，需要他原来的箱号
               目前可以根据其他值：id、sku等数据找到箱号，然后再删，因为这个时候箱子还没有改变，查库存还是原来的箱号
            */
            long id = inventtory.getId();

            if(i<=0){
                //只取第一次的箱号，因为每次都是一样的
                String tray = inventoryDao.InventoryTray(id);
                trays.add(tray);//箱号合集
            }

            String sku = inventtory.getSku();
            Date lot2 = inventtory.getLot2();//有效时间
            String lot = cargojcDao.getlot(sku);//物料表中原物料信息lot

            inventoryDao.UpdateCargoLot(lot,id);//更改inventory表
            inventoryDao.UpdateLot2(lot2,lot);  //更改lot表 lot2有效时间

            i++;
        }
        //删除物料箱里的记录
        if (trays.size()>=1){
            QueryWrapper<CargojcEntity> cargo = new QueryWrapper<>();
            cargo.in("cargono",trays);
            cargojcDao.delete(cargo);
        }
    }
}